題目描述:
給定一個只包含大小寫字母和空格 ' '
的字符串 s
,返回其最後一個單詞的長度。如果字符串尾部包含空格,應該跳過這些空格,找到最後一個單詞的長度。最後一個單詞是指字符串中最後一個非空部分。
注意: 字符串 s
中可能會有多餘的尾部空格。
Example 1:
s = "Hello World"
5
"World"
with length 5.解題思路:
這道 LeetCode 題目是一道實作題,解法相對簡單。基本思路是從字符串的末尾開始向前遍歷,首先跳過尾部的空格,然後找到最後一個單詞的起始位置,並計算該單詞的長度。這樣就能準確地返回最後一個單詞的長度。
var lengthOfLastWord = function(s) {
let count = 0;
let i = s.length - 1;
while (i >= 0 && s[i] === ' ') {
i--;
}
while (i >= 0 && s[i] !== ' ') {
count++;
i--;
}
return count;
};
時間複雜度:
O(n)
,其中n
是字符串的長度。
空間複雜度:O(1)
,只使用了常數空間。
對於熟悉 JavaScript 的讀者來說,此題應該有更直觀的解法。我們可以利用 String
的 API,如 trim()
來去除字符串頭尾的空白字元,然後使用 split(' ')
將字符串按空格分割成陣列,接著直接獲取最後一個單詞並計算其長度。這種方法簡單明瞭,非常適合快速解題。
var lengthOfLastWord = function(s) {
s = s.trim();
const words = s.split(' ');
return words[words.length - 1].length;
};
時間複雜度:
O(n)
,使用trim()
和split()
方法,這兩個方法的時間複雜度都是O(n)
。
空間複雜度:O(n)
,因為split()
會生成一個陣列。
總結:
無論是使用 while
迴圈還是 JavaScript 的 split
方法,建議讀者都要能夠掌握這兩種解法。
while
迴圈:更節省空間,適合對時間和空間有較高要求的場景。split
方法:更易讀,通過 API 直接實現,適合追求代碼簡潔和可讀性的場景。這道題目可以歸類為「while 迴圈」和「split 方法」。這兩種方法都能高效解決問題,選擇哪一種取決於具體需求和個人偏好。在工作中,我更偏好使用 JavaScript 的 API,而在解答 LeetCode 時則更喜歡使用 while
迴圈,因為這樣可以讓讀者更好地學習如何實作解法。